A “computing platform”, as used herein, means a hardware-based and/or software-based system having the capability to perform logic and/or arithmetic operations. It is often desirable to provide a computing platform with the capability of transmitting and receiving data between itself and one or more additional computing platforms coupled to a transmission medium. Computing platforms can include, without limitation, personal computers, laptop computers, servers, set-top boxes, hand-held devices, and numerous other such systems. A computing platform may include code in the form of instructions including, but not limited to, one or more device drivers or operating systems. Computing platforms coupled to a transmission medium may include data communications equipment such as, for example, servers, personal computers, routers, switches, and/or hubs.
Computing platforms are often coupled into a computer network such as a Wide Area Network (WAN) or a Local Area Network (LAN), just to mention two possible examples. Computer networks are typically constructed by coupling two or more computing platforms to a data transmission medium such as fiber optic cable, category 5 (CAT 5) networking cabling, and/or wireless media. These computing platforms typically access the transmission medium through an input/output (I/O) device or circuit such as a network interface card (NIC) or a LAN on motherboard (LOM). I/O devices may comprise a device or circuit capable of routing, switching, repeating, and/or passing data to or from a network. An I/O device may include a network transmitter and receiver, and an I/O controller.
Electronic data is typically exchanged by using a protocol stack in I/O devices to facilitate data transfer. A protocol stack, also known as a protocol suite, contains a number of layers, with each layer responsible for a different facet of the data transfer. Each layer typically utilizes a protocol that defines the types and formats of messages transferred by a layer to perform its facet of the data transfer. Generally, both the network receiver and the network transmitter have the same protocol stack.
A protocol stack such as a Transport Control Protocol over Internet Protocol (TCP/IP) stack is extensively used by data transfer systems to provide reliable and efficient end-to-end data streams between computers over the Internet. The TCP/IP protocol stack includes various layers, such as an application layer, transport layer, network layer, link layer, and the like.
The transport layer receives data from the application layer and facilitates the flow of data between application layers on the end systems. In the TCP/IP protocol stack, Transmission Control Protocol (TCP) is used as the transport protocol. TCP is a connection-oriented protocol that transfers data between two end systems. Before transferring data, the TCP layer on the source system establishes a connection with the TCP layer on the destination system, and then the TCP layers send all of the data to be transferred over this connection. TCP is a connection-oriented protocol, in which a connection is established before a data transfer occurs. A connection is established when the two ends of the connection have explicitly agreed to take part in the data transfer. In a connection-oriented protocol, all data is transferred over a connection, and the connection is terminated after the data transfer has completed.
The data transfer performed by TCP generally guarantees that the data will be sent correctly to the destination end system. To accomplish this, TCP (1) divides the data received from the application layer into appropriately sized packets for the network layer, (2) acknowledges all packets received, (3) sets time-outs to ensure that the destination end system acknowledges that the packets were received, and (4) performs other actions to ensure that when TCP receives data from the application layer, the corresponding TCP layer on the destination end system receives that data correctly.
It is widely accepted that the data flow control mechanism of TCP has been one of the key contributors to the robustness of the Internet. TCP's data flow control allows remote computers that may have disparate link speeds to communicate. For example, a WAN user connected via modem can connect to a server on a gigabit Ethernet link and still download files. As packets are dropped and retransmitted, TCP meters the data rate to reduce overruns on the slower link.
When a connection is initially established, TCP sends data at a slower rate to assess the bandwidth of the connection and to avoid overflowing the receiver or other infrastructure, such as routers or switches, in the network path that the frames must traverse to get from the sender to the receiver. A send window starts at a small size, typically sized to transmit two TCP packets. As TCP/IP segments are acknowledged, the send window is increased until the amount of data being sent per burst reaches the size of the receiver's window. At that point, the slow start algorithm is no longer used, and the receiver's window governs TCP flow control. However, at times during transmission, congestion can occur on a connection. If this happens (evidenced by missing acknowledgments and the need to retransmit), a congestion avoidance algorithm is used to reduce the send window size temporarily, and then to slowly increment the send window back towards the receiver's window size.
A problem with such TCP data flow control is that it is reactive instead of proactive. Packets have to be dropped before a congestion issue is recognized by TCP. Because TCP detects dropped packets by waiting for acknowledgments to time out, it can take multiple round-trip time delays before TCP considers a packet to be dropped. Additionally, TCP's congestion control is not visible to the receiver and the memory fullness state of the hardware, which is generally a significant reason for packet loss. If acknowledgments are dropped due to the memory being full, data transmission performance between sender and receiver can suffer significantly.